package py.com.sole.solesys;

import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import py.com.sole.dao.DaoFactory;
import py.com.sole.model.TipoArticulo;

@ManagedBean
@SessionScoped
public class TipoArticuloBean implements Serializable {

  /**
   *
   */
  private static final long serialVersionUID = -4873747667246098929L;
  private int id;
  private String descripcion;
  private List<TipoArticulo> tipoArticulos;
  private TipoArticulo tipoArticuloSelected;
  private boolean bloquearBotones = true;

  @PostConstruct
  private void init() {
    tipoArticuloSelected = new TipoArticulo();
    tipoArticulos = DaoFactory.getTipoArticulo().getTipoArticulos();
  }

  public void clean() {
    this.descripcion = null;
    this.tipoArticuloSelected = null;
    this.bloquearBotones = true;
  }

  public void addTipoArticulo() {
    FacesContext context = FacesContext.getCurrentInstance();

    TipoArticulo ta = DaoFactory.getTipoArticulo().getTipoArticuloByName(descripcion);

    if (ta != null) {
      context.addMessage(null, new FacesMessage("Advertencia",
                                                "El tipo de articulo " + descripcion
                                                + " ya se encuentra registrado"));
      this.clean();
      return;
    }

    TipoArticulo tipo = new TipoArticulo();
    tipo.setDescripcion(descripcion);
    tipo.setActivo(true);

    DaoFactory.getTipoArticulo().addTipoArticulo(tipo);
    context.addMessage(null, new FacesMessage("Mensaje", "Tipo de Articulo "
                                              + descripcion + " almacenado exitosamente"));

    tipoArticulos = DaoFactory.getTipoArticulo().getTipoArticulos();

    this.clean();
  }

  public void deleteTipoArticulo() {
    //DaoFactory.getTipoArticulo().deleteTipoArticulo(this.getTipoArticuloSelected().getId());
    TipoArticulo tipo = DaoFactory.getTipoArticulo().getTipoArticuloById(
      this.getTipoArticuloSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    tipo.setDescripcion(descripcion);
    tipo.setActivo(false);
    DaoFactory.getTipoArticulo().updateTipoArticulo(tipo);
    context.addMessage(null, new FacesMessage("Mensaje", "tipo de articulo "
                                              + descripcion + " eliminado exitosamente"));

    tipoArticulos = DaoFactory.getTipoArticulo().getTipoArticulos();

    this.clean();
  }

  public void editTipoArticulo() {
    TipoArticulo tipo = DaoFactory.getTipoArticulo().getTipoArticuloById(
      this.getTipoArticuloSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    tipo.setDescripcion(descripcion);
    DaoFactory.getTipoArticulo().updateTipoArticulo(tipo);
    context.addMessage(null, new FacesMessage("Mensaje", "tipo de articulo "
                                              + descripcion + " almacenado exitosamente"));

    tipoArticulos = DaoFactory.getTipoArticulo().getTipoArticulos();

    this.clean();
  }

  public void onRowSelect(SelectEvent event) {
    this.tipoArticuloSelected = ((TipoArticulo) event.getObject());
    this.descripcion = this.tipoArticuloSelected.getDescripcion();
    this.bloquearBotones = false;
    RequestContext.getCurrentInstance().update("tipoArticulo-form:dtTipo");
  }

  public void guardarListener() {

  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getDescripcion() {
    return descripcion;
  }

  public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
  }

  public List<TipoArticulo> getTipoArticulos() {
    if (tipoArticulos == null) {
      tipoArticulos = DaoFactory.getTipoArticulo().getTipoArticulos();
    }
    return tipoArticulos;
  }

  public void setTipoArticulos(List<TipoArticulo> tipoArticulos) {
    this.tipoArticulos = tipoArticulos;
  }

  public TipoArticulo getTipoArticuloSelected() {
    return tipoArticuloSelected;
  }

  public void settipoArticuloSelected(TipoArticulo tipoArticuloSelected) {
    this.tipoArticuloSelected = tipoArticuloSelected;
  }

  public boolean isBloquearBotones() {
    return bloquearBotones;
  }

  public void setBloquearBotones(boolean bloquearBotones) {
    this.bloquearBotones = bloquearBotones;
  }
}
